#include "consulta_determinacion.h"

Consulta_Determinacion::Consulta_Determinacion(QWidget *parent):VentanaConsulta(parent)
{

    indiceBusqueda=0;
    this->setWindowTitle("Consultar Determinación");

    modeloConsulta->setTable("determinacion");
    modeloConsulta->setHeaderData(0,Qt::Horizontal,"Id");
    modeloConsulta->setHeaderData(1,Qt::Horizontal,"Nombre");
    modeloConsulta->setHeaderData(2,Qt::Horizontal,"Método");
    modeloConsulta->setHeaderData(3,Qt::Horizontal,"Tipo_Resultado");
    modeloConsulta->setHeaderData(4,Qt::Horizontal,"Unidad_Medida");
    modeloConsulta->setHeaderData(5,Qt::Horizontal,"Volumen_Muestra");
    modeloConsulta->setHeaderData(6, Qt::Horizontal, "Hora_Entrega");
    modeloConsulta->setHeaderData(7,Qt::Horizontal,"Cantidad");
    modeloConsulta->setHeaderData(8,Qt::Horizontal,"Estado");
    modeloConsulta->select();

    filtro->setSourceModel(modeloConsulta);

    ui->tableView->setModel(filtro);
    QStringList elementos;
    elementos << "Nombre" << "Método";
    ui->comboBuscarPor->addItems(elementos);
    ui->tableView->setModel(filtro);

    ui->tableView->hideColumn(0);
    ui->tableView->hideColumn(6);
    ui->tableView->hideColumn(7);
    ui->tableView->hideColumn(8);
    ui->textoBusqueda->setPlaceholderText("Nombre");

    filtro->beginDeclareFilter();
    filtro->setFilter(8, QVariant("activo"), Qt::DisplayRole, Qt::MatchExactly);
    filtro->endDeclareFilter();
}

void Consulta_Determinacion::on_registrar_clicked()
{
    Regm_Determinacion *registro = new Regm_Determinacion();
    registro->exec();
    modeloConsulta->select();
    delete registro;
}

void Consulta_Determinacion::on_modificar_clicked()
{

    QModelIndexList indexes = obtenerIndicesSeleccionados(0);

    if(indexes.count() == 1)
    {
        QModelIndex index = indexes.at(0).sibling(indexes.at(0).row(), 0);
        int id = ui->tableView->model()->data(index).toInt();

        QDjangoQuerySet<Determinacion> determinaciones;
        Determinacion *det = determinaciones.filter(QDjangoWhere("id_determinacion", QDjangoWhere::Equals, id)).at(0);


        Regm_Determinacion *modif = new Regm_Determinacion(this, det);
        modif->exec();
        modeloConsulta->select();
        det->deleteLater();
        delete modif;

    }
    else
    {
        cuadroMensaje("Debe seleccionar una determinación", "");
    }
}

void Consulta_Determinacion::on_eliminar_clicked()
{

    QModelIndexList indexes = obtenerIndicesSeleccionados(0);
    if(indexes.count() > 0)
    {
        QModelIndex index = indexes.at(0).sibling(indexes.at(0).row(), 0);

        int id = ui->tableView->model()->data(index).toInt();

        QDjangoQuerySet<Determinacion> determinaciones;
        Determinacion *det = determinaciones.filter(QDjangoWhere("id_determinacion", QDjangoWhere::Equals, id)).at(0);

        int resp = cuadroMensaje("<p align=center><b>Confirmar Cambios</b></p>", "<p align=center>Esta seguro de que desea dar de baja a la determinación: " + det->getNombre() + "?</p>", "advertencia");

        if(resp == QMessageBox::Ok)
        {
            det->setEstado("inactivo");
            det->save();
            delete det;
            modeloConsulta->select();
        }
    }
    else
    {
       cuadroMensaje("Debe seleccionar una Determinación", "");
    }
}

void Consulta_Determinacion::on_textoBusqueda_textChanged(const QString &arg1)
{
    filtro->beginDeclareFilter();
    filtro->setFilter(indiceBusqueda, QVariant(arg1), Qt::DisplayRole, Qt::MatchContains);
    filtro->endDeclareFilter();
}

void Consulta_Determinacion::on_comboBuscarPor_currentTextChanged(const QString &arg1)
{
    if(arg1 == "Nombre") indiceBusqueda = 1;
    else if (arg1 == "Método") indiceBusqueda = 2;
    ui->textoBusqueda->setPlaceholderText(arg1);
}

void Consulta_Determinacion::on_refrescarTabla_clicked()
{

    for(int i = 0; i<ui->tableView->model()->columnCount()-1; i++)
    {
        filtro->removeFilter(i);
    }
    ui->comboBuscarPor->setCurrentIndex(0);
}

void Consulta_Determinacion::on_checkActivos_toggled(bool checked)
{

    if(checked)
    {
        filtro->beginDeclareFilter();
        filtro->setFilter(8, QVariant("activo"), Qt::DisplayRole, Qt::MatchExactly);
        filtro->endDeclareFilter();
    }
    else filtro->removeFilter(8);
}

void Consulta_Determinacion::on_tableView_doubleClicked()
{
    Consulta_Determinacion::on_modificar_clicked();
}
